<?php

//Både admin og forfatter er defineret som værende gældende, hvis man er logget ind på den rigtige kampagne!

class Rollespiller extends CI_model {
	public $alle_beskrivelser;
	public $pcer;
	public $pcer_ider;
	public $admin_individ;
	public $admin_individ_ider;
	public $admin_pc;
	public $admin_pc_ider;
	public $admin_gruppe;
	public $admin_gruppe_ider;	
	public $admin_sted;
	public $admin_sted_ider;
	public $admin_begivenhed;
	public $admin_begivenhed_ider;
	public $admin_alle;
	public $admin_alle_ider;
	public $ikke_admin_individ; //et array der indeholder id og navn på de individer man ikke administrerer
	public $ikke_admin_individ_ider;
	public $ikke_admin_gruppe; 
	public $ikke_admin_gruppe_ider;
	public $ikke_admin_sted; 
	public $ikke_admin_sted_ider;
	public $ikke_admin_begivenhed; 
	public $ikke_admin_begivenhed_ider;
	public $vaerker_alle; //de elementer man er forfatter på under givne kampagne.
	public $vaerker_alle_ider; //ider fra Svaerker.
	public $vaerker_individ;
	public $vaerker_individ_ider;
	public $vaerker_gruppe;
	public $vaerker_gruppe_ider;
	public $vaerker_sted;
	public $vaerker_sted_ider;
	public $vaerker_begivenhed;
	public $vaerker_begivenhed_ider;
	public $blik;

	function blik($deltager_id = 0, $kampagne_id = 0){ //finder mulige blik under givne kampagne (undtagen offgameblikket)
		if($deltager_id == 0){
			$deltager = $this->session->userdata('deltager');
			$deltager_id = $deltager['userid'];
		}
		if($kampagne_id == 0){
			$ingame = $this->session->userdata('ingame');
			$kampagne_id = $ingame['kampagne_id'];
		}

		$r = new rollespiller();
		$r->find_vaerker();
		$vaerker = $r->vaerker_individ;
		$r->find_admin();
		$admin = $r->admin_individ;
		$r->find_vaerker();
		$admin_pc = $r->vaerker_pc;
		$r->find_pcer($deltager_id);
		$pcer = $r->pcer;

		$blik = array();

		foreach($vaerker as $v){
			$this->blik['npc'][] = array(
				'id' => $v['id'],
				'navn' => $v['navn']
			);
		}
		foreach($admin_pc as $ap){
			$this->blik['admin_pc'][] = array(
				'id' => $ap['id'],
				'navn' => $ap['navn']
			);
		}
		foreach($admin as $a){
			$this->blik['npc'][] = array(
				'id' => $a['id'],
				'navn' => $a['navn']
			);
		}
		foreach($pcer as $p){
			$this->blik['pc'][] = array(
				'id' => $p['pc_id'],
				'navn' => $p['pc_navn']
			);
		}

	/*	$navn = array(); //bruges til at sortere.
		foreach($blik as $array) {
		    $navn[] = $array['navn'];
		}

		array_multisort($navn,SORT_STRING,$blik);
		$this->blik = $blik;*/
	}

	function find_vaerker(){ //finder de elementer man er forfatter for, under givne kampagne
		$ingame = $this->session->userdata('ingame');
		$deltager = $this->session->userdata('deltager');	

		$query = $this->db->query("
			SELECT element.id, navn.navn
			FROM element, navn
			WHERE forfatter = '".$deltager['userid']."'
			AND kampagne = '".$ingame['kampagne_id']."'
			AND element.id = navn.id_element
            AND element.slettet = 0
		");

		$this->load->model('core/element');
		$ele = new element();
		$ele->find_alle_af_type("individ");
		$ind = $ele->alle_af_type_ider;
		
		$ele->find_alle_af_type("player_character");
		$adpc = $ele->alle_af_type_ider;	
			
		$ele->find_alle_af_type("gruppe");
		$gru = $ele->alle_af_type_ider;
		$ele->find_alle_af_type("sted");
		$ste = $ele->alle_af_type_ider;
		$ele->find_alle_af_type("begivenhed");
		$beg = $ele->alle_af_type_ider;



//ADMINISTREREDE PCER
		$vaerker_pc = array();
		$vaerker_pc_ider = array();
		foreach($query->result() as $row){
			if(in_array($row->id,$adpc)){
				$vaerker_pc[] = array(
					'id' => $row->id,
					'navn' => $row-> navn
				);
				$vaerker_pc_ider[] = $row->id;
			}
		}
		$this->vaerker_pc = $vaerker_pc;
		$this->vaerker_pc_ider = $vaerker_pc;

//INDIVID
		$vaerker_individ = array();
		$vaerker_individ_ider = array();
		foreach($query->result() as $row){
			if(in_array($row->id,$ind)){
				$vaerker_individ[] = array(
					'id' => $row->id,
					'navn' => $row-> navn
				);
				$vaerker_individ_ider[] = $row->id;
			}
		}
		$this->vaerker_individ = $vaerker_individ;
		$this->vaerker_individ_ider = $vaerker_individ_ider;

//GRUPPE
		$vaerker_gruppe = array();
		$vaerker_gruppe_ider = array();
		foreach($query->result() as $row){
			if(in_array($row->id,$gru)){
				$vaerker_gruppe[] = array(
					'id' => $row->id,
					'navn' => $row->navn
				);
				$vaerker_gruppe_ider[] = $row->id;
			}
		}
		$this->vaerker_gruppe = $vaerker_gruppe;
		$this->vaerker_gruppe_ider = $vaerker_gruppe_ider;

//STED
		$vaerker_sted = array();
		$vaerker_sted_ider = array();
		foreach($query->result() as $row){
			if(in_array($row->id,$ste)){
				$vaerker_sted[] = array(
					'id' => $row->id,
					'navn' => $row->navn
				);
				$vaerker_sted_ider[] = $row->id;
			}
		}
		$this->vaerker_sted = $vaerker_sted;
		$this->vaerker_sted_ider = $vaerker_sted_ider;

//BEGIVENHED
		$vaerker_begivenhed = array();
		$vaerker_begivenhed_ider = array();
		foreach($query->result() as $row){
			if(in_array($row->id,$beg)){
				$vaerker_begivenhed[] = array(
					'id' => $row->id,
					'navn' => $row-> navn
				);
				$vaerker_begivenhed_ider[] = $row->id;
			}
		}
		$this->vaerker_begivenhed = $vaerker_begivenhed;
		$this->vaerker_begivenhed_ider = $vaerker_begivenhed_ider;

//ALLE
		$vaerker_alle = array();
		$vaerker_alle_ider = array();
		foreach($query->result() as $row){
			$vaerker_alle[] = array(
				'id' => $row->id,
				'navn' => $row-> navn
			);
			$vaerker_alle_ider[] = $row->id;
		}
		$this->vaerker_alle = $vaerker_alle;
		$this->vaerker_alle_ider = $vaerker_alle_ider;
	}

	function find_admin(){
		$deltager = $this->session->userdata('deltager');
		$ingame = $this->session->userdata('ingame');
			//print_r($ingame);
		
		//finder elementer man er admin for under givne kampagne
		$query = $this->db->query("
			SELECT admin_element.id_element, navn
			FROM admin_element, element, navn
			WHERE id_deltager = '".$deltager['userid']."'
			AND admin_element.id_element = element.id
			AND element.kampagne = '".$ingame['kampagne_id']."'
			AND admin_element.id_element = navn.id_element
            AND element.slettet = 0
			ORDER BY navn ASC
		");


		$this->load->model('core/element');
		$ele = new element();
		$ele->find_alle_af_type("individ");
		$ind = $ele->alle_af_type_ider;
		$ele->find_alle_af_type("player_character");
		$adpc = $ele->alle_af_type_ider;
		$ele->find_alle_af_type("gruppe");
		$gru = $ele->alle_af_type_ider;
		$ele->find_alle_af_type("sted");
		$ste = $ele->alle_af_type_ider;
		$ele->find_alle_af_type("begivenhed");
		$beg = $ele->alle_af_type_ider;


//INDIVID
		$admin_pc = array();
		$admin_pc_ider = array();
		foreach($query->result() as $row){
			if(in_array($row->id_element,$adpc)){
				$admin_pc[] = array(
					'id' => $row->id_element,
					'navn' => $row-> navn
				);
				$admin_pc_ider[] = $row->id_element;
			}
		}
		$this->admin_pc = $admin_pc;
		$this->admin_pc_ider = $admin_pc_ider;


//INDIVID
		$admin_individ = array();
		$admin_individ_ider = array();
		foreach($query->result() as $row){
			if(in_array($row->id_element,$ind)){
				$admin_individ[] = array(
					'id' => $row->id_element,
					'navn' => $row-> navn
				);
				$admin_individ_ider[] = $row->id_element;
			}
		}
		$this->admin_individ = $admin_individ;
		$this->admin_individ_ider = $admin_individ_ider;

//GRUPPE
		$admin_gruppe = array();
		$admin_gruppe_ider = array();
		foreach($query->result() as $row){
			if(in_array($row->id_element,$gru)){
				$admin_gruppe[] = array(
					'id' => $row->id_element,
					'navn' => $row->navn
				);
				$admin_gruppe_ider[] = $row->id_element;
			}
		}
		$this->admin_gruppe = $admin_gruppe;
		$this->admin_gruppe_ider = $admin_gruppe_ider;

//STED
		$admin_sted = array();
		$admin_sted_ider = array();
		foreach($query->result() as $row){
			if(in_array($row->id_element,$ste)){
				$admin_sted[] = array(
					'id' => $row->id_element,
					'navn' => $row-> navn
				);
				$admin_sted_ider[] = $row->id_element;
			}
		}
		$this->admin_sted = $admin_sted;
		$this->admin_sted_ider = $admin_sted_ider;

//BEGIVENHED
		$admin_begivenhed = array();
		$admin_begivenhed_ider = array();
		foreach($query->result() as $row){
			if(in_array($row->id_element,$beg)){
				$admin_begivenhed[] = array(
					'id' => $row->id_element,
					'navn' => $row-> navn
				);
				$admin_begivenhed_ider[] = $row->id_element;
			}
		}
		$this->admin_begivenhed = $admin_begivenhed;
		$this->admin_begivenhed_ider = $admin_begivenhed_ider;

//ALLE
		$admin_alle = array();
		$admin_alle_ider = array();
		foreach($query->result() as $row){
			$admin_alle[] = array(
				'id' => $row->id_element,
				'navn' => $row-> navn
			);
			$admin_alle_ider[] = $row->id_element;
		}
		$this->admin_alle = $admin_alle;
		$this->admin_alle_ider = $admin_alle_ider;

	}

	function find_ikke_admin(){ //finder elementer man ikke administrerer
		$this->find_admin();
		$admin = $this->admin_alle_ider;
	
		
		$this->load->model('core/element');
		$ele = new element();
		$ele->find_alle_af_type("individ");
		$ind = $ele->alle_af_type;
		$ele->find_alle_af_type("gruppe");
		$gru = $ele->alle_af_type;
		$ele->find_alle_af_type("sted");
		$ste = $ele->alle_af_type;
		$ele->find_alle_af_type("begivenhed");
		$beg = $ele->alle_af_type;

		foreach($ind as $i){
			if(!in_array($i['id'],$admin)){
				$this->ikke_admin_individ[] = $i;
				$this->ikke_admin_individ_ider[] = $i['id'];
			}
		}

		foreach($gru as $g){
			if(!in_array($g['id'],$admin)){
				$this->ikke_admin_gruppe[] = $g;
				$this->ikke_admin_gruppe_ider[] = $g['id'];
			}
		}

		foreach($ste as $s){
			if(!in_array($s['id'],$admin)){
				$this->ikke_admin_sted[] = $s;
				$this->ikke_admin_sted_ider[] = $s['id'];
			}
		}

		foreach($beg as $b){
			if(!in_array($b['id'],$admin)){
				$this->ikke_admin_begivenhed[] = $b;
				$this->ikke_admin_begivenhed_ider[] = $b['id'];
			}
		}
	}

	function find_pcer($deltager_id) 
		//def(PC): et element, der har id i player_character tabellen.
		//def(kampagne tilknytning): PC'en deltager i en kampagne, hvis den har været deltager i kampagnen forstået som begivenhed.
		{

		$this->load->model('core/kampagne');
		$this->load->model('translation/array_model');
		
		//finder først alle kampagner, da vi siden skal finde kampagnetilhørsforhold for pc'erne
		$kampagne = new kampagne();
		$kampagne->find_kampagner();
		$kampagner_ider = $kampagne->kampagner_ider;
		$kampagner_ider = $this->array_model->ider_php_til_mysql($kampagner_ider);

		//henter PC'er af player_character tabellen
		$query = $this->db->query("
			SELECT player_character.id, navn.navn
			FROM player_character, navn  
			WHERE id_deltager = '".$deltager_id."'
			AND player_character.id = navn.id_element
			");

		$pcer = array();

		foreach($query->result() as $rows) 
		{

			$query_kam = $this->db->query("
			SELECT id_begivenhed, navn
			FROM begivenhed_entitet, navn
			WHERE id_entitet = ".$rows->id."
			AND id_begivenhed IN ".$kampagner_ider."
			AND id_begivenhed = navn.id_element
			");
			
			if($query_kam->num_rows() > 0){ //hvis PC'en er tilknyttet een eller flere kampagner
				foreach($query_kam->result() as $row_kam){	
			
					$this->pcer[] = array(
						'pc_id' => $rows->id,
						'pc_navn' => $rows->navn,
						'kampagne_id' => $row_kam->id_begivenhed,
						'kampagne_navn' => $row_kam->navn
					);
					$this->pcer_ider[] = $rows->id;
	
				}
			}else{ //hvis PC'en endnu ikke er tilknyttet nogen kampagne

				$this->pcer[] = array(
					'pc_id' => $rows->id,
					'pc_navn' => $rows->navn,
					'kampagne_id' => 0,
					'kampagne_navn' => "ingen kampagne"
				);
				$this->pcer_ider[] = $rows->id;

			}

		}

	}


	public function find_beskrivelser($id_deltager)
	{
		/* 
		KODER:
			FEJL: mangler, og kritisk, at den bliver sat
			MANGLER: mangler, men ikke kritisk, at det bliver sat
			
		 */
		$query = $this->db->query('
			SELECT *
			FROM beskrivelse
			WHERE id_deltager = '.$id_deltager.'
		');

		$this->load->model('translation/tid_model');

		foreach($query->result() as $row)
		{
			$beskrivelse = array();

//ID
			if(isset($row->id) and !empty($row->id)){
				$beskrivelse['id'] = $row->id;			
			}else{
				$beskrivelse['id'] = "FEJL";
			}
//OVERSKRIFT		
			if(isset($row->overskrift) and !empty($row->overskrift)){
				$beskrivelse['overskrift'] = $row->overskrift;			
			}else{
				$beskrivelse['overskrift'] = "MANGLER";
			}

//TEKST		
			if(isset($row->tekst) and !empty($row->tekst)){
				$beskrivelse['tekst'] = $row->tekst;			
			}else{
				$beskrivelse['tekst'] = "MANGLER";
			}

//TYPE_GAME	
			if(isset($row->type_game) and !empty($row->type_game)){
				$beskrivelse['type_game'] = $row->type_game;			
			}else{
				$beskrivelse['type_game'] = "FEJL";
			}


//CREATED
			if(isset($row->created) and !empty($row->created)){
				$beskrivelse['created'] = $row->created;			
			}else{
				$beskrivelse['created'] = "MANGLER";
			}


//UPDATED
			if(isset($row->updated) and !empty($row->updated)){
				$beskrivelse['updated'] = $row->updated;			
			}else{
				$beskrivelse['updated'] = "MANGLER";
			}

//HEMMELIG
			if(isset($row->hemmelig) and !empty($row->hemmelig)){
				$beskrivelse['hemmelig'] = $row->hemmelig;			
			}else{
				$beskrivelse['updated'] = "FEJL";
			}

//SLETTET
			if(isset($row->slettet) and !empty($row->slettet)){
				$beskrivelse['slettet'] = $row->slettet;			
			}else{
				$beskrivelse['slettet'] = "FEJL";
			}

//INGAME-TID
			if(isset($row->ingame_tid) and !empty($row->ingame_tid)){
				$beskrivelse['ingame_tid_db'] = $row->ingame_tid;
				$beskrivelse['ingame_tid_navn'] = $this->tid_model->tid_navn($row->ingame_tid);	
			}else{
				$beskrivelse['ingame_tid_db'] = $row->ingame_tid;
				$beskrivelse['ingame_tid_navn'] = "<i>ingen</i>";
			}

			$query_element = $this->db->query('
				SELECT * 
				FROM element_beskrivelse
				WHERE id = '.$row->id.'
			');

			$row_element = $query_element->row();

			if($query_element->num_rows() != 1){
				$beskrivelse['element_beskrivelse'] = "Nej";
				$beskrivelse['omhandler_id'] = "FEJL";
				$beskrivelse['omhandler_navn']= "FEJL";
				$beskrivelse['feature'] = "FEJL";
				
			}else{
				$beskrivelse['element_beskrivelse'] = "Ja";
//OMHANDLER_id
				if(isset($row_element->id_element) and !empty($row_element->navn)){
					$beskrivelse['omhandler_id'] = $row_element->id_element;	
					$query_omhandler = $this->db->query('
						SELECT navn 
						FROM navn
						WHERE id_element = '.$row_element->id_element.'
					');		
					$row_omhandler = $query_omhandler->row();
					$beskrivelse['omhandler_navn'] = $row_omhandler->navn;
				}else{
					$beskrivelse['omhandler_id'] = "FEJL";
					$beskrivelse['omhandler_navn'] = "FEJL";
				}

//FEATURE
				if(isset($row_element->feature) and !empty($row_element->feature)){	
					$query_feature = $this->db->query('
						SELECT feature.feature_navn
						FROM feature
						WHERE feature.feature = "'.$row_element->feature.'"
					');
					$row_feature = $query_feature->row();
					if($query_feature->num_rows() == 1)
					{
						$beskrivelse['feature'] = $row_feature->feature_navn;			
					}else{
						$beskrivelse['feature'] = "FEJL";
					}
				}else{
					$beskrivelse['feature'] = "FEJL";
				}
			}


			if($row->type_game == "in_game")
			{
				$this->load->model('indhold/ingame_beskrivelse');
				$besk = new ingame_beskrivelse();
				$besk->afgoer_eksistens($row->id);
				if($besk->eksistens == 1)
				{
					$besk->find_ingame_beskrivelse($row->id);
					$ingame_besk = $besk->ingame_beskrivelse;
					$beskrivelse['forfatter_id'] = $ingame_besk['forfatter_id'];
					$beskrivelse['forfatter_navn'] = $ingame_besk['forfatter_navn'];			
				}else{
					$beskrivelse['forfatter_id'] = "FEJL";
					$beskrivelse['forfatter_navn'] = "FEJL";	
				}
			}

			$this->alle_beskrivelser[] = $beskrivelse;

		}
	}
	
	
	function create_user($username,$rollespiller_fornavn,$rollespiller_efternavn,$email_adress,$admin,$aktiv) {
		
		//$this->load->helper("database");
		
		$data = array(
			'username' => $username,
			'rollespiller_navn' => $rollespiller_fornavn,
			'rollespiller_efternavn' =>$rollespiller_efternavn,
			'email_adress' =>$email_adress,
			'side_admin' =>$admin,
			'aktiv' => $aktiv,
		);
		
		$this->db->insert("deltager",$data);

		$query = $this->db->query('SELECT * FROM deltager ORDER BY id DESC LIMIT 1');
		$row = $query->row();
		$id = $row->id; //deltageren id i deltagertabellen.





		
		return $id;
	}
	

	
}
